# main_ui.py
# 要运行此应用，请确保已安装必要的库:
# pip install nicegui python-dotenv pymysql pandas

from datetime import datetime
from nicegui import ui, app  # 添加 nicegui 导入
from dotenv import load_dotenv
import os
import io
import pandas as pd
from sqlalchemy import create_engine  # 新增导入

# import theme

# 从新的逻辑文件中导入函数
from attendance_logic import (
    connect_db,
    fetch_and_analysis,  # 新增导入
)
from entity.daily_attendance import DailyAttendance  # 新增导入

# 存储结果的全局变量，以便在NiceGUI中更新
results_output = []

df = pd.DataFrame()


async def perform_analysis(
    start_date_input,
    end_date_input,
    result_area,
):
    global results_output
    start_date_str = start_date_input.value
    end_date_str = end_date_input.value

    results_output.clear()

    if not all(
        [
            start_date_str,
            end_date_str,
        ]
    ):
        ui.notify("所有字段均为必填项。", type="negative")
        results_output.append("错误：所有字段均为必填项。")
        result_area.update()
        return

    try:
        start_date_dt = datetime.strptime(start_date_str, "%Y-%m-%d")
        end_date_dt = datetime.strptime(end_date_str, "%Y-%m-%d")
        if end_date_dt < start_date_dt:
            ui.notify("结束日期不能早于开始日期。", type="negative")
            results_output.append("错误：结束日期不能早于开始日期。")
            result_area.update()
            return
    except ValueError:
        ui.notify("日期格式错误，请使用 YYYY-MM-DD 格式。", type="negative")
        results_output.append("错误：日期格式错误。")
        result_area.update()
        return

    # 更新UI，显示正在处理
    results_output.append("正在连接数据库并获取记录...")
    result_area.update()

    connection = connect_db()

    if connection:
        try:
            # 直接获取DataFrame
            df = fetch_and_analysis(start_date_str, end_date_str)

            if df.empty:
                results_output.append("在指定日期范围内未找到记录。")
            else:
                # 使用表格显示结果
                result_area.clear()
                ui.table.from_pandas(df).classes("w-full h-full")

                # 导出Excel
                excel_filename = f"出勤记录_{start_date_str}_至_{end_date_str}.xlsx"
                df.to_excel(excel_filename, index=False)
                results_output.append(f"\n结果已导出到: {excel_filename}")

        except Exception as e:
            results_output.append(f"处理过程中发生错误: {e}")
            print(f"处理过程中发生错误: {e}")
        finally:
            connection.close()
            results_output.append("\n数据库连接已关闭。")
            print("\n数据库连接已关闭。")
    else:
        results_output.append("数据库连接失败，请检查连接信息和网络。")

    result_area.update()


@ui.page("/entry")
def entry_page():
    with theme.frame("about me "):
        entry_page_content()


def entry_page_content():
    # 启用全屏模式
    ui.fullscreen()

    # 顶部标题区域
    # with ui.header():
    #     ui.label("数据分析系统").classes("text-h4 text-center")

    # 使用Splitter实现可调节的左右布局
    with ui.splitter(value=30).classes("w-full h-full") as splitter:
        with splitter.before:
            # 左侧输入区域
            with ui.column().classes("p-4"):
                ui.label("查询日期范围").classes("text-bold")
                with ui.row().classes("items-center"):
                    with ui.column():
                        ui.label("开始日期")
                        start_date_input = ui.input(
                            value=datetime.now().strftime("%Y-%m-%d")
                        ).props("type=date")
                    with ui.column():
                        ui.label("结束日期")
                        end_date_input = ui.input(
                            value=datetime.now().strftime("%Y-%m-%d")
                        ).props("type=date")

                # 定义result_area变量
                result_area = ui.markdown().classes("w-full h-full")

                ui.button(
                    "开始分析",
                    on_click=lambda: perform_analysis(
                        start_date_input,
                        end_date_input,
                        dstable,
                    ),
                ).classes("mt-4").props("color=primary")

        with splitter.after:
            # 右侧结果区域
            # 状态信息显示区域
            status_area = ui.markdown().classes("w-full")
            # 表格显示区域
            table_area = ui.element("div").classes("w-full h-full")
            # if "df" in globals() and not df.empty:
            # table_area.clear()
            # with table_area:
            dstable = ui.table.from_pandas(df).classes("w-full h-full")
            ui.button("下载excel", on_click=onclick)


def onclick():
    data = io.BytesIO()
    df.to_excel(data)
    data.seek(0)
    ui.download(data.read(), "test.xlsx")


if __name__ in {"__main__", "__mp_main__"}:  # 支持NiceGUI的重载
    ui.run()
